/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.marlboroug.editors;

import com.marlboroug.entity.Editors;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;


@Stateless
public class EditorsManager implements EditorsManagerRemote {
    
    @PersistenceContext(unitName = "Marlboroug-ejbPU")
    EntityManager em;

    /** Permet de créer un editeur
     * 
     * @param editor Envoie un objet de type editeur
     * @return Un boolean pour confirmer la création
     */
    @Override
    public boolean create (Editors editor) {       
        Boolean resultat = true; //Resultat de la recherche
        //On vérifie que username n'existe pas
        List<Editors> temp = findCreateEditor(editor.getName());
        for (Editors n : temp) {
            resultat = false;
        } 
        if(resultat){
            em.persist(editor);
            return true;
        }else {
            return false;
        }
    }

    /** Permet de supprimer un editeur
     * 
     * @param ID_editors Envoie un ID d'un editeur
     * @return Un boolean pour confirmer la suppression
     */
    @Override
    public boolean delete (Long ID_editors) {
        Editors editor = em.find(Editors.class, ID_editors);
        em.remove(editor);
        Editors temp = find(ID_editors);
        return temp == null;
    }

    /** Permet de retourner un objet Editors en fonction d'un ID
     * 
     * @param ID_editors Un ID d'un editeur
     * @return Un objet editeur
     */
    @Override
    public Editors find (Long ID_editors) {
        Editors editor = em.find(Editors.class, ID_editors);
        return editor;
    }

    /** Permet de mettre à jour un editeur
     * 
     * @param editor Envoie un objet editeur
     * @return Un boolean pour confirmer la modification
     */
    @Override
    public boolean update (Editors editor) {
        //On vérifie que username n'existe pas
        Editors temp = find(editor.getIDeditors());
        if(temp != null){
            em.merge(editor);
            return true;
        }else {
            return false;
        }
    }

    /** Permet de retourner une liste d'editeurs en fonction d'un mot clés
     * 
     * @param pattern Un mot clés
     * @return Une liste d'editeurs
     */
    @Override
    public List<Editors> retrieveByName (String pattern) {
        pattern = "%" + pattern + "%";
        String q = "SELECT m FROM Categories m WHERE m.name LIKE :pattern";
        TypedQuery<Editors> query = em.createQuery(q, Editors.class);
        query.setParameter("pattern", pattern);
        List<Editors> editor = query.getResultList();
        return editor;
    }
    
    /** Permet de retourner un editeur en fonction d'un nom
     * 
     * @param pattern Un nom
     * @return Un editeur
     */
    @Override
    public List<Editors> findCreateEditor (String pattern) {       
    String q = "SELECT m FROM Editors m WHERE m.name LIKE :pattern";
    TypedQuery<Editors> query = em.createQuery(q, Editors.class);
    query.setParameter("pattern", pattern);
    List<Editors> editor = query.getResultList();
    return editor;
    }
    
    /** Permet de retourner une liste des editeurs
     * 
     * @return Une liste d'editeurs
     */
    @Override
    public List<Editors> findAll () {       
    String q = "SELECT m FROM Editors m";
    TypedQuery<Editors> query = em.createQuery(q, Editors.class);
    List<Editors> editor = query.getResultList();
    return editor;
    }
}
